Day5的練習答案:
Try1:
由於const是常數,沒辦法更改,但可以選擇用重寫的方式
const data = [3,4,6];
data[0] = 1;
data[1] = 2;
data[2] = 3;
以上就可以將data陣列從3,4,6換成1,2,3且不會報錯。
Try2:
console.log(1=='1'); //true;==比較運算子中,不會判斷型別。
console.log(1==='1'); //false;===比較運算子中會判斷型別。
Try3:
x = (1 == '1') && (1 === '1'); //false
y = (1 != '1') || (10 === '10'); //false
z = !(1 === '1'); //true
Try4:
for(let i = 10; i>=1; i--){
console.log(i);
}
以上~讓我們開始進入今天的內容吧!
Day4我們了解了物件的基本概念,再JavaScript中提供了一些"內建物件"讓我們來使用,以下為大家介紹。
String物件是用以處理字串型別的包裹物件,提供字串的擷取、加工、搜尋...等功能,下面介紹幾個比較常用的。
let str = "gdsgdfsgjsdfgdfsegsdfgdfsg"
console.log(str.length); //得到:26
透過上述例子可以發現,str這個變數裡有一堆字元,我們可以一個一個用數的數出有幾個字元,當然也可以透過length這個內建的方法直接算出有多少個字元。
let str = 'My name is Ben';
console.log(str.indexOf('a')); //得到:4
console.log(str.inddexOf('z'); //得到:-1,當搜尋不到時,會回傳-1
在這個例子中要注意的是My和name中間有一個空白,會被計算進去,
所以得到的是4而不是3。
let str = "'My name is Ben';
console.log(str.indexOf('e')); //結果:6
console.log(str.lastIndexOf('e')); //結果:12
//我想取出name
let str = "My name is Ben";
console.log(str.slice(3,7))
上述例子可以觀察到,是從第三個索引值開始(包含第三個),到第七個索引值以內的,所以會取出name。
Try1:取出Ben,應該怎麼下指令?
let str = "a,b,c,d,e,f"
console.log(str[1]); //結果:,
let arr2 = str.split(",")
console.log(arr2[1]) //結果:b
上述例子可以發現,原本str的索引值[1]是逗號,
當我們將str的逗號分割後,得到的結果就會是b。
p.s.可以自己試看看arr[0]是什麼呢
let str = "My name is Ben";
console.log(str.replace('Ben', 'Bill')); //結果:My name is Bill
這邊要注意的是,如果替換的字串有兩個以上,只會替換掉第一個(從左邊數過來)。
let str = "Javascript and Javascript are hard to learn!";
console.log(str.replace('Javascript', 'C#'));
// 結果:C# and Javascript are hard to learn!
由上述例子可以發現,第一個Javascript被重新賦值成C#,但第二個沒有。
let str = "My name is Ben";
let str2 = str.toUpperCase();
console.log(str2);
//結果:MY NAME IS BEN
let str = "My name is Ben";
let str2 = str.toLowerCase();
console.log(str2);
//結果:my name is ben
以上是一些比較常用的方法,當然還有其他,想了解的可以參考w3c的網站:
https://www.w3schools.com/js/js_string_methods.asp
JavaScript提供了一些方法,讓我們可以處理數值,以下介紹幾種較常用的。
let num = 123;
//轉型前的型別
console.log(typeof (num)); //結果:number
//轉型後的型別
let num1 = num.toString();
console.log(typeof (num1)); //結果:string
let num = 3.1415926;
console.log(num.toFixed(2)); //結果:3.14
let num = "3345678";
console.log(typeof (num)); //結果:string
//將字串轉換成整數後
let num1 = parseInt(num);
console.log(typeof (num1)); //結果:number
以上是一些比較常用的方法,當然還有其他,想了解的可以參考w3c的網站:
https://www.w3schools.com/js/js_number_methods.asp
惡司胎頭,JavaScript也提供了一些基本的數學運算
console.log(Math.max(10, 20, 30)); //結果:30
console.log(Math.min(10, 20, 30)); //結果:10
console.log(Math.abs(-3.14)); //結果:3.14
console.log(Math.pow(2, 4)); //結果:16
上述例子表示,2的4次方=16。
console.log(Math.sqrt(25)); //結果:5
console.log(Math.ceil(3.14)); //結果:4
console.log(Math.floor(3.14)); //結果:3
console.log(Math.round(3.14)); //結果:3
console.log(Math.round(3.5)); //結果:4
console.log(Math.trunc(3.14)); //結果:3
console.log(Math.trunc(3.5)); //結果:3
// 結果:得到 >0 <1 的數值
console.log(Math.random());
// 結果:得到 >10 <10的數值
console.log(Math.random() * 10);
以上是一些Math提供的方法,以下也附上w3c的網站,裡面還有其他的方法可以參考。
https://www.w3schools.com/js/js_math.asp
Try2:
透過上面所學包含String,Number,Math提供的方法,請用Math.random在console印出1~10的亂數(顯示的數值不包含小數點)。
JavaScript提供了Array,Map,Set物件,其中Map和Set是在ES6才有的。
以下介紹三種的差異:
是一種操作陣列型態值的物件,前面使用過很多次了,這邊附上w3c的連結,裡面有完整的介紹。
https://www.w3schools.com/jsref/jsref_obj_array.asp
Map物件每組元素都有對應的值,也就是關聯陣列的物件,我們直接看程式碼。
//宣告一個Map的物件
let data = new Map();
//用set 將值 新增進去
let data = new Map();
// 使用 set 將 值 新增進去data
data.set('Ben','boy');
data.set('Mary','girl');
data.set('Kevin','male');
//p.s.這邊也可以寫成 let data = new Map([['Ben','boy'],['Mary','girl'],['Kevin','male']])
/*這邊介紹一些Map提供的方法*/
//size: 取得 data 的元素有幾個
console.log(data.size); // 3
//get(key):透過 key 取得 value
console.log(data.get('Mary')); // girl
//has(key):透過key檢查元素是否存在
console.log(data.has('Bill')); //false
//key():依序取得所有的key
for (let key of data.keys()){
console.log(key);
} // Ben,Mary,Kevin
//value():依序取得所有的value
for(let value of data.values()){
console.log(value);
} //boy,girl,male
//delet():刪除 key Ben
data.delete('Ben');
console.log(data.size); // 2 因為Ben被刪除了,所以只剩兩個元素
//clear():刪除全部
data.clear();
console.log(data.size); // 0 清除全部元素。
Set物件是用管理唯一值集合的物件,因此若重複加入的會自動被忽略。
//宣告一個Set物件
let num = new Set();
//使用add新增值
num.add(10);
num.add(1);
num.add(80);
num.add(40);
num.add(10);
//也可以寫成這樣let num = new Set([10,1,80,40,10]);
console.log(num.size); //4 如果有重複的會自動被忽略!
Set提供的方法基本上與Map的大同小異,但要注意的是Set物件中,有重複的值是會自動被忽略的(只計算一次)。
今天就到這裡,需要調整一下寫文章的步調,不然估計每天時間不夠用...
我們明天見!